//package com.guns21.cloud.gateway.filter.zuul;
//
//import com.netflix.zuul.ZuulFilter;
//import com.netflix.zuul.context.RequestContext;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.servlet.http.HttpServletRequest;
//
//
//public class ExampleFilter extends ZuulFilter {
//
//    private final Logger logger = LoggerFactory.getLogger(getClass());
//
//    /**
//     * filterType：返回一个字符串代表过滤器的类型，在zuul中定义了四种不同生命周期的过滤器类型，具体如下：
//     * pre：可以在请求被路由之前调用
//     * routing：在路由请求时候被调用
//     * post：在routing和error过滤器之后被调用
//     * error：处理请求时发生错误时被调用
//     *
//     * @return
//     */
//    @Override
//    public String filterType() {
//        return "pre";
//    }
//
//    /**
//     * filterOrder：通过int值来定义过滤器的执行顺序
//     *
//     * @return
//     */
//    @Override
//    public int filterOrder() {
//        return 0;
//    }
//
//    /**
//     * shouldFilter：返回一个boolean类型来判断该过滤器是否要执行，所以通过此函数可实现过滤器的开关。
//     * 我们直接返回true，所以该过滤器总是生效。
//     *
//     * @return
//     */
//    @Override
//    public boolean shouldFilter() {
//        return true;
//    }
//
//    @Override
//    public Object run() {
//
//        RequestContext ctx = RequestContext.getCurrentContext();
//        HttpServletRequest request = ctx.getRequest();
//        logger.info(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString()));
//        Object accessToken = request.getParameter("accessToken");
//        if (accessToken == null) {
//            logger.warn("access token is empty");
//            ctx.setSendZuulResponse(false);
//            ctx.setResponseStatusCode(401);
//            return ctx;
//        }
//        ctx.addZuulRequestHeader("XX-TOKEN", "ssss");//add header
//        logger.info("access token ok");
//        return ctx;
//    }
//}